/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Persistencia;


import Clases.Factura;
import Clases.TiposIva;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * Esta clase es la persistencia a la base de datos para la gestión de TIPOS DE IVA. En esta clase se podrá:
 *    - Añadir un tipo de iva
 *    - Obtener un tipo de iva
 *    - Obtener todos los tipos de iva
 * @author Jesús Fernández
 */
public class PersistenciaTiposIva {


    public static int insertarTipoIva(TiposIva tiva){
        
        int ret = 0;
        // datos para hacer la inserción del tipo de iva recibido
        float porcentaje = tiva.getPorcentaje();
        String descripcion = tiva.getDescripcion();
        

        // sentencia SQL para la insercion en BD
        String sql = "insert into tiposiva (descripcion, porcentaje)"
                   + " values ('"+ descripcion +"', "+ porcentaje +");";

        // declaracion de variables para la conexion de la BD
        Connection con  = null;
        Statement st = null;

        // CONEXION y ejecucion de la sentencia SQL
        try{
            con = Conexion.getConexion();
            st = con.createStatement();
            ret = st.executeUpdate(sql);
        }
        catch(Exception e){
            System.out.println("Error al insertar un nuevo TIPO DE IVA \n\n"+e.getMessage());
        }
        finally{
            Conexion.cerrarConexion(con);
        }

        return ret;
    }
    
    public static int actualizaTipoIva(TiposIva tiva, String descripcionBD){
        
        int ret = 0;
        // datos para hacer la inserción del tipo de iva recibido
        float porcentaje = tiva.getPorcentaje();
        String descripcion = tiva.getDescripcion();
        

        // sentencia SQL para la insercion en BD
        String sql = "update tiposiva set descripcion='"+ descripcion +"', porcentaje='"+ porcentaje 
                    +"' where descripcion='"+ descripcionBD +"';";

        // declaracion de variables para la conexion de la BD
        Connection con  = null;
        Statement st = null;

        // CONEXION y ejecucion de la sentencia SQL
        try{
            con = Conexion.getConexion();
            st = con.createStatement();
            ret = st.executeUpdate(sql);
        }
        catch(Exception e){
            System.out.println("Error al actualizar TIPO DE IVA \n\n"+e.getMessage());
        }
        finally{
            Conexion.cerrarConexion(con);
        }

        return ret;
    }
    
    public static int eliminaTipoIva(TiposIva tiva){
        
        int ret = 0;
        boolean existe = false;
        
        List<Factura> listafacturas = PersistenciaFactura.obtenerFacturas();
        TiposIva iva = null;
        for(Factura f: listafacturas){            
            if(tiva.equals(f.getTipoIva())){
                existe = true;
                ret = 3;
            }
        }
        
        // sentencia SQL para la eliminacion en BD
        String sql = "delete from tiposiva where descripcion='"+ tiva.getDescripcion() +"';";

        // declaracion de variables para la conexion de la BD
        Connection con  = null;
        Statement st = null;

        // CONEXION y ejecucion de la sentencia SQL
        try{
            con = Conexion.getConexion();
            if(!existe){
                st = con.createStatement();
                ret = st.executeUpdate(sql);
            }
        }
        catch(Exception e){
            System.out.println("Error al actualizar TIPO DE IVA \n\n"+e.getMessage());
        }
        finally{
            Conexion.cerrarConexion(con);
        }

        return ret;
    }


    public static TiposIva obtenterTipoIva(String descripcion){

        // sentencia SQL
        String sql= "select * from tiposiva where descripcion = '"+ descripcion +"';";

        // declaracion de variables para la conexion y ejecucion de la SQL en BD
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;

        // declaracion de variables para el objeto TiposIva
        TiposIva tiva = null;
        float porcentaje;


        try{
            con = Conexion.getConexion();
            st = con.createStatement();
            rs = st.executeQuery(sql);
            if(rs.next()){
                
                porcentaje = rs.getFloat("porcentaje");
                
                tiva = new TiposIva(descripcion, porcentaje);

            }

            rs.close();
            st.close();

        }
        catch(Exception e){
            System.out.println("Error al obtener el TIPO DE IVA \n "+e.getMessage());
        }
        finally{
            Conexion.cerrarConexion(con);
        }
        return tiva;
    }


    public static ArrayList<TiposIva> obtenerTiposIva(){

        // sentencia SQL
        String sql = "select * from tiposiva";

        // declaracion de variables para el objeto TipoIva
        ArrayList<TiposIva> listaivas= new ArrayList();
        TiposIva tiva = null;
        String descripcion = null;
        float porcentaje;

        // declaracion de variables para la conexion de la BD
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;

        try{
            con = Conexion.getConexion();
            st = con.createStatement();
            rs = st.executeQuery(sql);

            while(rs.next()){

                descripcion = rs.getString("descripcion");
                porcentaje = rs.getFloat("porcentaje");
                
                tiva = new TiposIva(descripcion, porcentaje);
                
                listaivas.add(tiva);
            }
            
            rs.close();
            st.close();
        }
        catch(Exception e){
            System.out.println("Error al obtener todos los TIPOS DE IVA \n "+e.getMessage());
        }
        return listaivas;
    }

}
